package Controlador;

import Modelo.Alumno;
import Modelo.AlumnoJDBC;
import Modelo.Computadora;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Procesar", urlPatterns = {"/Procesar"})
public class Procesar extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String operacion = "";
        String mensaje = "";
        int nfilas1 = 0;
        int nfilas2 = 0;
        AlumnoJDBC alumnojdbc = null;

        if (request.getParameter("operacion") != null) {
            operacion = request.getParameter("operacion").trim();
        }

        //Condicionales para las operaciones
        if (operacion.equalsIgnoreCase("agregar")) {
            List<Computadora> lstComputadoras = new ArrayList<Computadora>();
            try {
                alumnojdbc = new AlumnoJDBC();
                lstComputadoras = alumnojdbc.listarComputadoras();
            } catch (SQLException ex) {
                System.out.println("Error en SQL: " + ex.getMessage());
            }
            request.setAttribute("listaComputadoras", lstComputadoras);
            request.getRequestDispatcher("alumnos/RegistrarAlumno.jsp").forward(request, response);
        } else if (operacion.equalsIgnoreCase("agregarAlumno")) {
            if (request.getParameter("txtCarnet") == null
                    || request.getParameter("txtNombre") == null
                    || request.getParameter("txtApellidos") == null
                    || request.getParameter("txtCarrera") == null
                    || request.getParameter("txtCiclo") == null
                    || request.getParameter("txtFecha") == null
                    || request.getParameter("txtHora") == null) {
                //Error faltan parametros
                mensaje = "Error: Faltan parametros";
            } else if (request.getParameter("txtCarnet").trim().isEmpty()
                    || request.getParameter("txtNombre").trim().isEmpty()
                    || request.getParameter("txtApellidos").trim().isEmpty()
                    || request.getParameter("txtCarrera").trim().isEmpty()
                    || request.getParameter("txtCiclo").trim().isEmpty()
                    || request.getParameter("txtFecha").trim().isEmpty()
                    || request.getParameter("txtHora").trim().isEmpty()) {
                //Error los campos no pueden estar vacios
                mensaje = "Error: Campos vacios";
            } else if (request.getParameter("txtCarnet").length() > 7
                    || request.getParameter("txtNombre").length() > 45
                    || request.getParameter("txtApellidos").length() > 45
                    || request.getParameter("txtCarrera").length() > 40
                    || request.getParameter("txtCiclo").length() > 2
                    || request.getParameter("txtFecha").length() > 10
                    || request.getParameter("txtHora").length() > 10) {
                //Error de Longitud
                mensaje = "Error: Longitud de campos incorrecta";
            } else {
                try {
                    int id_computadora = Integer.parseInt(request.getParameter("id_computadora"));
                    String carnet = request.getParameter("txtCarnet");
                    String nombre = request.getParameter("txtNombre");
                    String apellidos = request.getParameter("txtApellidos");
                    String carrera = request.getParameter("txtCarrera");
                    int ciclo = Integer.parseInt(request.getParameter("txtCiclo"));
                    String fecha = request.getParameter("txtFecha");
                    String hora = request.getParameter("txtHora");

                    //Insertar el Registro
                    alumnojdbc = new AlumnoJDBC();
                    nfilas1 = alumnojdbc.insert1(carnet, nombre, apellidos, carrera, ciclo);
                    int id_alumno = alumnojdbc.selectAlumnoX(carnet, nombre, apellidos, carrera, ciclo);
                    nfilas2 = alumnojdbc.insert2(fecha, hora, id_alumno, id_computadora);
                    if (nfilas1 > 0 && nfilas2 > 0) {
                        mensaje = "OK: Registro Insertado Correctamente";
                    } else {
                        System.out.println("4");
                        mensaje = "Error: El Registro no ha sido guardado.";
                    }

                } catch (SQLException ex) {
                    //Excepcion
                    mensaje = "Error: El Registro no ha sido guardado.";
                    System.out.println("Error en SQL: " + ex.toString());
                }
            }
            List<Computadora> lstComputadoras = new ArrayList<Computadora>();
            try {
                alumnojdbc = new AlumnoJDBC();
                lstComputadoras = alumnojdbc.listarComputadoras();
            } catch (SQLException ex) {
                System.out.println("Error en SQL: " + ex.getMessage());
            }
            request.setAttribute("listaComputadoras", lstComputadoras);
            request.setAttribute("mensaje", mensaje);
            
            //Redireccionando y enviando parametros.
            request.getRequestDispatcher("alumnos/RegistrarAlumno.jsp").forward(request, response);

        } else if (operacion.equals("eliminar")) {
            alumnojdbc = new AlumnoJDBC();
            int id_alumno = Integer.parseInt(request.getParameter("id"));
            try {
                alumnojdbc.delete2(id_alumno);
                alumnojdbc.delete1(id_alumno);
            } catch (SQLException ex) {
                System.out.println("Error en SQL: " + ex.getMessage());
            }
            response.sendRedirect("alumnos/DarBajaAlumno.jsp");
        } else if (operacion.equals("ver_pc")) {
            int id_alumno = Integer.parseInt(request.getParameter("id"));
            alumnojdbc = new AlumnoJDBC();
            Computadora pc = new Computadora();
            String nombre="";
            try {
                pc = alumnojdbc.selectComputadoraX(id_alumno);
                nombre = alumnojdbc.selectAlumnoX2(id_alumno);
            } catch (SQLException ex1) {
                System.out.println("Error en SQL: " + ex1.getMessage());
            }
            
            request.setAttribute("Nombre", nombre);
            request.setAttribute("Computadora", pc);
            request.getRequestDispatcher("computadoras/VerComputadora.jsp").forward(request, response);
        } else if (operacion.equals("consultaPcFecha")) {
            List<Computadora> lstComputadoras = new ArrayList<Computadora>();
            try {
                alumnojdbc = new AlumnoJDBC();
                lstComputadoras = alumnojdbc.listarComputadoras();
            } catch (SQLException ex) {
                System.out.println("Error en SQL: " + ex.getMessage());
            }
            request.setAttribute("listaComputadoras", lstComputadoras);
             
            //Redireccionando y enviando parametros.
            request.getRequestDispatcher("reservaciones/ConsultaPcFecha.jsp").forward(request, response);
        } else if (operacion.equalsIgnoreCase("ConsultarPcFecha")){
            int id_computadora = Integer.parseInt(request.getParameter("id_computadora"));
            String fecha = request.getParameter("txtFecha");
            List<Alumno> lstAlumnos = new ArrayList<Alumno>();
            alumnojdbc = new AlumnoJDBC();
             
            try {
                lstAlumnos=alumnojdbc.selectPcFecha(id_computadora, fecha);
            } catch (SQLException ex) {
                System.out.println("Error en SQL: " + ex.getMessage());
            }
             
            request.setAttribute("id_computadora", id_computadora);
            request.setAttribute("fecha", fecha);
            request.setAttribute("listaAlumnos", lstAlumnos);
            request.getRequestDispatcher("reservaciones/VerPcFecha.jsp").forward(request, response);
        } else if (operacion.equalsIgnoreCase("consultaFecha")){
            response.sendRedirect("reservaciones/ConsultaFecha.jsp");
        } else if (operacion.equalsIgnoreCase("ConsultarFecha")){
            String fecha = request.getParameter("txtFecha");
            List<Alumno> lstAlumnos = new ArrayList<Alumno>();
            alumnojdbc = new AlumnoJDBC();
             
            try {
                lstAlumnos=alumnojdbc.selectFecha(fecha);
            } catch (SQLException ex) {
                System.out.println("Error en SQL: " + ex.getMessage());
            }
             
            request.setAttribute("fecha", fecha);
            request.setAttribute("listaAlumnos", lstAlumnos);
            request.getRequestDispatcher("reservaciones/VerFecha.jsp").forward(request, response);
        } else if (operacion.equalsIgnoreCase("Listar")){
            response.sendRedirect("alumnos/ListarAlumnos.jsp");
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
